// PROGRAMA : TABPE001
// OPCAO : 'ETC' - CLASSIFICADO PELO CODIGO DO ELEMENTO
// 'ETD' - CLASSIFICADO PELA DESCRICAO DO ELEMENTO
// BIBLIOTECA : SISP
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : GEJUSPC - GERENCIA DA JUSTICA, SEGURANCA PUBLICA E
// CIDADANIA / INSTITUTO DE IDENTIFICACAO
// PROGRAMADOR : EDU/FM DATA: 27/05/92
// OBJETIVO : OPCAO: ' '
// OBJETIVO : EMITIR TABELAS
// ATUALIZACOES DATA
// PROGRAMA : TABPE001 29/09/1999
// BIBLIOTECA : SISP
// PROGRAMADOR :
// OBJETIVO : ALTERACAO DE TELA
// ALTERACAO DE DATA N6 PARA N8 EM 05/10/1999
// OBS : ESTE PROGRAMA FOI REESTRUTURADO POR SOLON MIRANDA
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileNotFoundException;
import java.text.ParseException;

import net.sf.jasperreports.engine.JRException;

import org.apache.commons.lang3.StringUtils;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Tabpe001Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Tabpe001A;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.model.Sislac01;
import br.com.vti.sisp_sicrim.antigo.model.Sisll001;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Tabpe001 OBJETIVO : OPCAO: ' ' OBJETIVO : EMITIR TABELAS *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/tabpe001")
public class Tabpe001 {
	// Views utilizadas
	SicTabelas vwDvetab = new SicTabelas();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Tabpe001A tabpe001A;
	Tabpe001Report report;
	// Includes utilizados
	Sislac01 sislac01 = new Sislac01();
	Sisll001 sisll001 = new Sisll001();
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Tabpe001 tabpe001Anterior;
	String faseproc = "0";

	private int cont = 0;
	private String tabdec = "";
	private String tab1 = "";

	private Tabpe001A preMapas() {
		tabpe001A = new Tabpe001A(true, sessao);
		tabpe001A.setDataCorrente(UtilBean.obtemDataDia());
		tabpe001A.setNomeClasse(this.getClass().getSimpleName().toUpperCase());

		sessao.getSisgsisp().setVar(10);
		// Par�grafo: r0()
		return tabpe001A;
	}

	public Tabpe001(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public InputStreamDownload executar(Tabpe001A tabpe001A) {
		try {
			InputStreamDownload retorno = main(tabpe001A);
			if (retorno == null && !result.used()) {
				return main(null);
			} else {
				return retorno;
			}

		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}

		return null;
	}

	private InputStreamDownload main(Tabpe001A ptabpe001A) throws ParseException, JRException, FileNotFoundException {
		int tab;
		if (ptabpe001A == null) {
			primeiraVez = true;
			// tabpe001B = new Tabpe001B (primeiraVez);
			tabpe001A = preMapas();
			tabpe001A.setNavegar("../tabpe001/executar");
			result.include("tabpe001A", tabpe001A);
			sessao.setAtributo("TABPE001", this);
			tabpe001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		} else {
			restaurarEstados(ptabpe001A);
		}

		// RELATORIO 1 PS=60 LS=133 SG=ON
		report = new Tabpe001Report();

		tabpe001A.receberTela(false, result);
		if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
			tabpe001A.enviarMensagem(null, "");
			result.include("tabpe001A", tabpe001A);
			sessao.setAtributo("TABPE001", this);
			tabpe001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}
		if (!(sessao.getSisgsisp().getOperacao().trim().equals("ETD") || sessao.getSisgsisp().getOperacao().trim().equals("ETC"))) {
			saidaExit();
		}
		if (tabpe001A.getCodtab() == 0) {
			tabpe001A.enviarMensagem("codtab", "");
			result.include("tabpe001A", tabpe001A);
			sessao.setAtributo("TABPE001", this);
			tabpe001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}
		if (tabpe001A.getImpressora().trim().equals("SYSOUT")) {
			// DEFINE PRINTER(EFM = 1) OUTPUT 'SYSOUT'
		} else {
			if (tabpe001A.getImpressora().trim().equals("")) {
				// DEFINE PRINTER(EFM = 1)
			} else {
				// DEFINE PRINTER(EFM = 1) OUTPUT IMPRESSORA
			}
		}
		funcoes.tabsemi(sessao);
		vwDvetab.consultaCodigoTabela(tabpe001A.getCodtab());
		vwDvetab.fecha();
		if (vwDvetab.totalRegistros() == 0) {
			tabpe001A.enviarMensagem("codtab", "");
			result.include("tabpe001A", tabpe001A);
			sessao.setAtributo("TABPE001", this);
			tabpe001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		tabdec = UtilBean.moveSubstring(tabdec, 0, 3, "N", tabpe001A.getCodtab());
		switch (tabdec) {
		case "013": {
			Tabpe002 tabpe002 = new Tabpe002(result, sessao);
			return tabpe002.executar(tabpe001A.getCodtab(), "");
		}
		case "018": {
			Tabpe003 tabpe003 = new Tabpe003(result, sessao);
			return tabpe003.executar(null, tabdec);
		}
		case "015": {
			Tabpe006 tabpe006 = new Tabpe006(result, sessao);
			return tabpe006.executar(null);
		}
		default: {
			break;
		}
		}

		if (tabpe001A.getCodtab() < 100) {
			tab = 99;
		} else {
			if (tabpe001A.getCodtab() < 200) {
				tab = 199;
			} else {
				tab = 299;
			}
		}
		tabpe001A.setCod(String.valueOf(tabpe001A.getCodtab()));

		vwDvetab.consultaTabele(tab, Long.parseLong(tabpe001A.getCod()));
		report.setTabela(vwTabele.getDescricaoElem());
		vwDvetab.fecha();
		if (vwDvetab.registrosProcessados() == 0) {
			report.setTabela(StringUtils.repeat("*", 54));
		}

		if (tabpe001A.getOperacao().trim().equals("ETD")) {
			if (tabpe001A.getCodtab() == 1) {
				janela1();
			}
			if (tabpe001A.getCodtab() == 1 || tabpe001A.getCodtab() == 2) {
				tabdec = UtilBean.moveSubstring(tabdec, 0, 3, "N", tabpe001A.getCod33());
			}
			while (vwTabele.leituraTabdecMaiorig(tabpe001A.getCodtab(), tabpe001A.getCod33())) {
				if (!tabpe001A.getUf().trim().equals("")) {
					if (!vwTabele.getChaveAlfaAcesso().trim().equals(tabpe001A.getUf())) {
						continue;
					}
				}
				relatorio();
				// if (vwTabele.quebraDintabcodtab()) {
				// tabpe001A.setMensagemSaida("EMISSAO EFETUADA OK");
				// break;
				// }
			}
			tabpe001A.setMensagemSaida("EMISSAO EFETUADA OK");
			vwTabele.fecha();
		}
		if (tabpe001A.getOperacao().trim().equals("ETC")) {
			tab = tabpe001A.getCodtab();
			tabpe001A.setCod("1");
			if (tabpe001A.getCodtab() == 1) {
				janela1();
			}
			if (tabpe001A.getCodtab() == 1 || tabpe001A.getCodtab() == 2) {
			}
			while (vwTabele.leituraTabeleMaiorig(tabpe001A.getCodtab(), 1L)) {
				if (tabpe001A.getUf() != null && !tabpe001A.getUf().trim().equals("")) {
					if (!vwTabele.getChaveAlfaAcesso().trim().equals(tabpe001A.getUf())) {
						continue;
					}
				}
				relatorio();
				// if (vwTabele.quebraDintabcodtab()) {
				// tabpe001A.setMensagemSaida("EMISSAO EFETUADA OK");
				// break;
				// }
			}
			tabpe001A.setMensagemSaida("EMISSAO EFETUADA OK");
			vwTabele.fecha();

		}
		vwDvetab.pesq = "";
		sessao.setAtributo("TABPE001", this);
		result.include("tabpe001A", tabpe001A);
		// if (!result.used()) {
		// tabpe001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		// }
		return report.imprimir();

	}

	private void relatorio() throws JRException, ParseException {
		cont += 1;
		if (cont > 50) {
			// report.enviarReceberTela(false, result);
			cont = 0;
		}

		report.setDataCorrente(UtilBean.obtemDataDia());
		report.setDiatabChalfa(vwTabele.getChaveAlfaAcesso());
		report.setDiatabDescel(vwTabele.getDescricaoElem());
		report.setDiatabGrupel(vwTabele.getGrupoElem());
		report.setDintabCodele(vwTabele.getCodigoElem());
		report.setDintabDatapo(vwTabele.getDataApoio());
		report.setDintabDatatu(vwTabele.getDataAtualizacao());
		report.setDintabMatfun(vwTabele.getMatriculaFunc());
		report.setCodtab(tabpe001A.getCodtab());

		report.setPageSize(60);
		report.setLineSize(133);
		// RELATORIO
		report.gravaRelatorio(2);
		// RELATORIO
	}

	private void janela1() throws ParseException {

		// IF UF = ' '
		// REINPUT 'UF INVALIDA' ALARM
		// END-IF
		tab1 = UtilBean.concatena(report.getTabela(), "-", tabpe001A.getUf());
		report.setTabela(tab1);
	}

	private void saidaExit() {
		funcoes.sissm001(result, sessao);
	}

	private void restaurarEstados(Tabpe001A ptabpe001A) {
		this.tabpe001Anterior = (Tabpe001) sessao.getAtributo("TABPE001");
		if (ptabpe001A != null) {
			tabpe001A = ptabpe001A;
		} else {
			tabpe001A = this.tabpe001Anterior.tabpe001A;
		}
		tabpe001A.setSessao(sessao);
		this.faseproc = this.tabpe001Anterior.faseproc;
	}
}
